/*
 * I-Sanger 实验室
 * file
 * 文件管理
 */
layui.use(['layer','element','form','table','tree'],function(){
	var	element = layui.element,
		layer = layui.layer,
		form = layui.form,
		table = layui.table,
		tree = layui.tree;

	var _selectArr = new Array(); // 新建文件夹 - 已选访问人员

	/*
	 * 文件管理 表格数据
	 */
	fileList();
	function fileList()
	{
		table.render({
			elem:'#file-table',
			url:'http://mock/data',
			skin:'line',
			page:true,
			request:{
				limitName:'pageSize'
			},
			limit:'10',
			height:470,
			cols:[[
				{type: 'checkbox'},
				{field:"file",title:"文件名称",minWidth:320,
					templet:function(d){
						//判断类型，文件夹或是文件
						return '<div class="table-tdTitle-info"><h6>'+(d.file.type == "file"?'<i class="fas fa-file" style="color:#a0a4d8"></i>' + d.file.name + '':'<i class="fas fa-folder" style="color:#e8c814"></i><a href="javascript:;" data-hash="'+d.num+'" data-level="'+d.num+'" data-name="'+d.file.name+'">' + d.file.name + '</a>')+'</h6></div>'
					}
				},
				{field:"cname",title:"创建人",width:190},
				{field:"time",title:"更新时间",width:220,sort:true},
				{field:"operating",title:"操作",width:125,
	                templet:function(d){
						spstr =  String(d.LAY_INDEX).split('');
						var _index = spstr[spstr.length-1];
	                	var _placement;
	                	_index>7||_index==='0'?_placement='topCenter':_placement='center';
	                    return '<div class="fc-dropdown" placement="'+_placement+'">'+
		                    '<a href="javascript:;" class="layui-icon layui-icon-more"></a>'+
		                    '<div class="fc-dropdown-menu" style="display:none;">'+
		                    '<ul class="fc-dropdown-menu-list tac">'+
		                    '<li><a href="javascript:;" lay-event="copy">复制到</a></li>'+
		                    '<li><a href="javascript:;" lay-event="move">移动到</a></li>'+
		                    '<li><a href="javascript:;" lay-event="edit">重命名</a></li>'+
		                    '<li><a href="javascript:;" lay-event="download">下载</a></li>'+
		                    '<li><a href="javascript:;" lay-event="del">删除</a></li>'+
		                    '</ul>'+
		                    '</div></div>';
	                }			
				},
			]],
			text:{
				none:'<div class="empty" style="padding-top:70px;"><p style="color:#676a6c;">您还没上传过文件，点击<a href="javascript:;">上传</a></p></div>'
			},
			done:function(res){
				console.log(res)
			}
		});
	}

	/*
	 *	监听表格操作
	 */
	table.on('tool(file-table-filter)',function(obj){
		var data = obj.data;
    	if(obj.event === 'del'){	// 删除
			layer.confirm('确定删除所选文件吗？<br>'+data.file.name, {title:'确认删除',icon:7,area:'400px'},function(index){
				obj.del();
				layer.close(index);
			});
    	}else if(obj.event === 'edit'){	//重命名
    		newFolder(data,reloadFolder);
    	}else if(obj.event === 'copy'){ // 复制
	    	fileTree({
	    		type:'复制',
	    		data:data.file.name,
	    	});    		
    	}else if(obj.event === 'move'){ //移动
	    	fileTree({
	    		type:'移动',
	    		data:data.file.name,
	    	});      		
    	}else if(obj.event === 'download'){ // 下载
    		// 填写下载事件
    		layer.msg('这里填写下载事件')
    	}
	});

	/**
	 * 监听表格是否选中状态
	 */
	table.on('checkbox(file-table-filter)',function(obj){
    	var checkStatus = table.checkStatus('file-table')
    	,data = checkStatus.data;
		if(data.length>0){
			$('.file-table-top-operation').removeClass('layui-hide');
		}else{
			$('.file-table-top-operation').addClass('layui-hide');
		}
    	if(data.length>1){
    		$('.file-table-top-operation [data-type="edit"]').removeClass('layui-btn-primary').addClass('layui-btn-disabled');
    	}else{
    		$('.file-table-top-operation [data-type="edit"]').removeClass('layui-btn-disabled').addClass('layui-btn-primary');
    	}
	})
	/**
	 * 监听表格头工具栏事件
	 */
	var fileActive = {
	    del: function(){ //删除
	    	var checkStatus = table.checkStatus('file-table')
	    	,data = checkStatus.data;
	    	console.log(data)
			layer.confirm('确定删除所选文件吗？', {title:'确认删除',icon:7,area:'400px'},function(index){
				// 这里填写删除的事件，结束后刷新下表格 方法：reloadFolder()
				layer.close(index);
			});
	    }
	    ,copy:function(){ //复制到
	    	var checkStatus = table.checkStatus('file-table')
	    	,data = checkStatus.data;
	    	fileTree({
	    		type:'复制',
	    		data:checkStatus.data,
	    	});
	    }
	    ,move:function(){ // 移动到
	    	var checkStatus = table.checkStatus('file-table')
	    	,data = checkStatus.data;
	    	fileTree({
	    		type:'移动',
	    		data:checkStatus.data,
	    	});  	
	    }
	    ,edit:function(){ // 重命名
	    	var checkStatus = table.checkStatus('file-table')
	    	,data = checkStatus.data;
	    	newFolder(data[0],reloadFolder);
	    }
	    ,refresh: function(){ //刷新表格数据
	    	table.reload('file-table',{
	    		where:{}
	    	})
	    }	    
	};
	$('body').on('click','.file-table-top-operation a:not(.layui-btn-disabled)',function(){
		var type = $(this).data('type');
		fileActive[type] ? fileActive[type].call(this) : '';  	
	});

	/*搜索表格*/
	$('.file-table-list-search').on('click',function(){
		table.reload('file-table',{
			where:''
		})
	})

	/*
	 * 文件树 复制操作，移动操作 
	 */
	function fileTree(param){
		console.log(param)
		layer.open({
			type:2,
			title:param.type+'到',
			area:['600px','400px'],
			resize:false,
			content:['file-tree.html','no'],
			btn:['确定','取消'],
			success:function(layero,index){
			},
			yes:function(index,layero){
				var iframe = layer.getChildFrame('body', index);
				var val = $(layero).find('iframe')[0].contentWindow.treename.value; //将子窗口中的 treename 抓过来
				console.log(val)
				layer.close(index);//关闭弹层
			}
		})
	}

	/*
	 *	新建文件夹
	 */
	$('.btn-new-folder').on('click',function(){
		newFolder(null,reloadFolder);
	});
	function reloadFolder() {
		fileActive.refresh();
	}	

	//新建文件夹 - 编辑文件夹(会赋值表单内容) 同一个
	function newFolder(data,callback){
		removeAccessUser(data);// 移除所有已选访问人员
		var _title;
		if(data){
			_title = '编辑文件夹'
		}else{
			_title = '新建文件夹'
		}
		layer.open({
			type:1,
			title:_title,
			area:['600px'],
			resize:false,
			content:$('#popup-new-folder'),
			btn:['确定','取消'],
			success: function(layero, index) {
				formval(data);// 表单赋值
				$(':focus').blur();
				// 添加form标识
				layero.addClass('layui-form');
				// 将保存按钮改变成提交按钮
				layero.find('.layui-layer-btn0').attr({
					'lay-filter' : 'new-folder-submit',
					'lay-submit' : ''
				});
			},
			yes:function(index,layero){
				form.on('submit(new-folder-submit)',function(data){
					console.log(data.field)
					var checkedData = tree.getChecked('access-user-tree-id'); //获取选中人员的数据，需和data.field信息拼接
					console.log(checkedData)
					if(data.field.folder_name !== ''){
						if(callback) callback(data.field);//如果是编辑，直接更新表格中对应数据，不刷新表格。
					}
					layer.close(index);			
					return false;
				})
			},
			end: function(index, layero){ 
				layer.closeAll();
			},	
		})
	}

	/*
	 *	文件夹目录，hash值定位
	 */
	var folderHash = {
		foldNav:'$(".table-crumb")',	//文件夹目录导航
		init:function(){
			var _self = this,
				_n = _self.foldNav;			
			//获取hash，文件夹目录进行填充
			var _getHash = location.hash.replace(/^#folder=/, '');
			var _arr = _getHash.replace('%2F',"");
			_arr = _arr.split('%2F');
			var _nav = '';
			if(_arr[0] == ''){
				_nav += '<cite>全部文件</cite>';
				eval(_n).html(_nav);
			}else{
				_arr.map(function(d,i){
					var dArr = d.split('|');
					if(i == _arr.length - 1){
						_nav += '<cite>'+ decodeURIComponent(dArr[0]) +'</cite>';
					}else{
						_nav += '<a href="javascript:;" data-level="'+ dArr[1]+'" data-hash="'+ dArr[2]+'" data-router="'+ dArr[0] +'">'+  decodeURIComponent(dArr[0]) +'</a>';
					}
				})
				eval(_n).html('<a href="javascript:;" data-router="back">返回上一级</a> | <a href="javascript:;" data-router="all">全部文件</a>'+_nav+'');
			}
			if(_getHash) _self.reload(_arr[_arr.length - 1]);	//表格目录定位到最后一个目录
			this.set();
			this.jump();
		},
		set:function(obj){	//打开文件夹，设置hash
			var _self = this,
				_n = _self.foldNav;
			$('body').on('click','.file-table-box .table-tdTitle-info h6 a',function(){
				var _name = $(this).data('name');	//文件夹名
				var level = $(this).data('level');
				var uni_hash = $(this).data('hash');
				// console.log(_name)

				var _n = _self.foldNav;
				//判断是否存在a，如不存在a，表示当前在跟目录中
				var _a = eval(_n).find('a').length;
				if(_a === 0){	//根目录
					//文件夹目录导航进行填充
					eval(_n).html('<a href="javascript:;" data-router="back">返回上一级</a> | <a href="javascript:;" data-level="2" data-router="all">全部文件</a><cite data-router="'+_name+'">'+_name+'</cite>');
				}else{	//当前非根目录，至于第几级就不知道了
					var _b = eval(_n).find('cite').text(),
						_c = eval(_n).find('cite').attr('data-router');
					eval(_n).find('cite').before('<a href="javascript:;" data-level="'+level+'" data-router="'+ _c +'">'+ _b +'</a>');
					eval(_n).find('cite').html(_name).attr('data-router',_name);
					eval(_n).find('cite').html(_name).attr('data-level',level);
				}
				_self.reload(_name);	//表格文件夹目录更新

				//Hash地址的定位
				var hash = location.hash.replace(/^#folder=/, '');	//获取hash %2F
				location.hash = 'folder='+ hash + '%2F' + _name +'|'+level+'|'+uni_hash;	//设置hash
			});
		},
		jump:function(){	//跳转目录
			var _self = this,
				_n = _self.foldNav;

			eval(_n).on('click','a',function(){
				var _router = $(this).data('router');
				var hash = location.hash.replace(/^#folder=/, '');
				switch (_router) {
					//返回上一页
					case 'back':
						var _r = $(this).parent().find('a:last').data('router'),	//最后一个a的router
							_c = $(this).nextAll('cite:last').data('router');		//最后一个cite（目录）
						//当前最后一个目录已经是主目录了，直接跳到全部文件。否则就一步步向上跳转
						if(_r === 'all'){
							$(this).parent().html('<cite>全部文件</cite>');
							_self.reload();
							location.hash = '';
						}else{
							//同步hash
							hash = hash.substring(0, hash.lastIndexOf(_c));
							hash = hash.substring(0, hash.lastIndexOf('%2F'));
							location.hash = 'folder=' + hash;

							//同步文件夹目录导航
							var _a = $(this).nextAll('a:last').text(),
								_b = $(this).nextAll('a:last').data('router');
							$(this).nextAll('a:last').nextAll().remove();
							$(this).nextAll('a:last').replaceWith('<cite data-router="'+_b+'">'+_a+'</cite>')
							_self.reload(_b);
						}
						break;
					//返回到全部
					case 'all':
						$(this).parent().html('<cite>全部文件</cite>')
						_self.reload();
						location.hash = '';	//清空url中hash值
						break;
					//跳转到指定目录
					default:
						console.log('跳转到指定目录')
						var _a = $(this).text(),
							_b = $(this).data('router');

						//同步hash
						hash = hash.substring(0, hash.indexOf(_b) + _b.length);
						location.hash = 'folder=' + hash;

						$(this).nextAll().remove();
						$(this).replaceWith('<cite data-router="'+_b+'">'+_a+'</cite>');
						_self.reload(_b);
						break;
				}
			});
		},
		reload:function(param){	//更新表格形态的目录
			// console.log('表格重载参数：',param)
			table.reload('file-table',{
				url:'http://mock/data',
				where:{
					id:param,	//目录名称。这里仅演示提交参数，返回对应目录下的数据，渲染成表格。
				},
				page:{
					curr:1
				}
			})
		}
	};
	folderHash.init();	//表格目录操作，刷新页面，保持hash值对应目录结构


	//编辑文件夹名称表单赋值
	function formval(data){
		var name,desc;
		if(data){
			name = data.name;
			desc = data.desc;
		}
		form.val('new-folder-filter',{
			'folder_name':name,
			'folder_desc':desc
		})
		$('textarea').trigger('keyup');
	}

	//新建文件夹-添加访问用户
	$('.add-access-user').on('click',function(){
		var _arr = new Array();// 获取已勾选人员
		$.each($(this).siblings('a'),function(a,b){
			_arr.push($(b).data('id'))
		});
		layer.open({
			type:1,
			title:'选择可访问用户',
			area:['360px','600px'],
			//offset: 'r',
			shade:false,
			btn:['确定','取消'],
			content:$('#access-user'),
			success:function(layero,index){
				tree.render({
					elem: '#access-user-tree'
					,data: [{
						title: '组一' //一级菜单
						,id:11
						,children: [{
							title: '武燕',
							id:31,
						},{
							title: '蔡涛',
							id:32
						},{
							title: '姚秀兰',
							id:33
						},{
							title: '史敏',
							id:34
						}]
					},{
					title: '组二' //一级菜单
						,id:12
						,children: [{
					  		title: '姜霞',
					  		id:41
					  	},{
					  		title: '丁敏',
					  		id:42
					  	},{
					  		title: '卢静',
					  		id:43
					  	},{
					  		title: '宋磊',
					  		id:44
					  	}]
					}]
					,id:'access-user-tree-id'
					,showCheckbox: true  //是否显示复选框
				});
				tree.setChecked('access-user-tree-id', _arr); //勾选已有人员
			},
			yes:function(index,layero){
				var checkedData = tree.getChecked('access-user-tree-id'); //获取选中节点的数据
				var _name='';
				checkedData.map(function(item,index){
					item.children.map(function(d,i){
						_selectArr.push(d.id);
						_name += '<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-primary" data-id="'+d.id+'">'+d.title+' <i class="layui-icon layui-icon-close"></i></a>';
					})
				})
				$('.access-user-list').find('a:not(".add-access-user")').remove();
				$('.access-user-list').prepend(_name);
				layer.close(index);
			}
		})
	});

	// 新建文件夹弹层 - 移除已选访问人员
	$('body').on('click','.access-user-list a:not(".add-access-user")',function(){
		var _id = $(this).data('id');
		_selectArr.splice($.inArray(_id,_selectArr),1);
		$(this).remove();
	});

	/**
	 * 状态1：新建文件夹，移除所有已访问人员
	 * 状态2：编辑文件夹，获取当前文件夹数据，得到对应人员列表，赋值给_selectArr
	 * 演示数据中已存在“user”字段，表示对应文件夹下的人员信息
	 */
	function removeAccessUser(data){
		_selectArr = [];
		$('.access-user-list a:not(".add-access-user")').remove();
		if(data){ // 对相应数据进行赋值
			if(data.user){
				var _name='';
				data.user.map(function(d,i){
					_selectArr.push(d.user);
					_name += '<a href="javascript:;" class="layui-btn layui-btn-xs layui-btn-primary" data-id="'+d.id+'">'+d.title+' <i class="layui-icon layui-icon-close"></i></a>';
				})
				$('.access-user-list').prepend(_name);
			}
		}
	}

});
//输入字符限制
function textLimitCheck(thisArea, maxLength){
	if (thisArea.value.length > maxLength){ 
		thisArea.value = thisArea.value.substring(0, maxLength); 
		thisArea.focus();
	}
	textareaInput.innerText = maxLength - thisArea.value.length; 
}